package kr.pe.johnkim.sendme.util;

import java.util.ArrayList;

import android.app.Activity;
import android.util.Log;

/**
 * 모든 액티비티 클래스를 관리하는 클래스 이다.
 * singleton 으로 구현 한다.
 * 
 * @author johnkim
 *
 */
public class SendMeActivityManager {

	public static String TAG = SendMeActivityManager.class.getSimpleName();
	
	private static SendMeActivityManager sendMeActivityManager = null;
	private ArrayList<Activity> activityList = null;
	
	private SendMeActivityManager() {
		activityList = new ArrayList<Activity>();
	}
	
	/**
	 * 액티비티 매니저의 instance 를 가져 온다.
	 * 
	 * @return
	 */
	public static SendMeActivityManager getInstance() {
		if(SendMeActivityManager.sendMeActivityManager == null) {
			sendMeActivityManager = new SendMeActivityManager();
		}
		
		return sendMeActivityManager;
	}
	
	/**
	 * 액티비티 리스트 getter.
	 * 
	 * @return
	 */
	public ArrayList<Activity> getAcArrayList() {
		return activityList;
	}
	
	/**
	 * 액티비티 리스트 개수
	 */
	public int getAcArrayListCount(){
		return activityList.size();
	}
	
	/**
	 * 액티비티를 리스트에 추가 한다.
	 * 
	 * @param activity
	 */
	public void addActivity(Activity activity) {
		activityList.add(activity);
	}
	
	/**
	 * 액티비티를 리스트에서 삭제 한다.
	 * 
	 * @param activity
	 * @return
	 */
	public boolean removeActivity(Activity activity) {
		return activityList.remove(activity);
	}
	
	/**
	 * 모든 액티비티를 종료 한다.
	 */
	public void finishAllActivity() {
		Log.d(TAG,"finishAllActivity");
		try{
			Log.d(TAG,"activityList.size="+activityList.size());
			if(activityList!=null && activityList.size()>0){
//				for(Activity activity : activityList) {		// java.util.ConcurrentModificationException
//					activity.finish();
//					activityList.remove(activity);
//				}
				
				// 모든 액티비티 종료
				for(int i=0; i<activityList.size(); i++){
					activityList.get(i).finish();
				}
				
				// 리스트 비움
				int activityListSize = activityList.size();
				for(int i=0; i<activityListSize; i++){
					activityList.remove(activityList.get(activityListSize-i-1));		// 삭제 후 사이즈가 바껴서 for문 정상동작안하므로 activityList.size() --> activityListSize 로 바꿈
				}
				
			}else if(activityList==null){
				Log.d(TAG,"activityList==null");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
